home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / util1 / yk211src.lha / Yak_2.11_Src / Prefs / BGUI / Root_window.c < prev    next >
C/C++ Source or Header  |  1995-11-16  |  32KB  |  669 lines

  1. /************************************************************************
  2. **************************  BGUI ROOT WINDOW  ***************************
  3. ************************************************************************/
  4.  
  5.  
  6. #define __USE_SYSBASE
  7.  
  8. #include <exec/memory.h>
  9. #include <exec/types.h>
  10. #include <intuition/intuition.h>
  11. #include <intuition/classes.h>
  12. #include <intuition/classusr.h>
  13. #include <intuition/imageclass.h>
  14. #include <intuition/gadgetclass.h>
  15. #include <libraries/bgui.h>
  16. #include <libraries/bgui_macros.h>
  17. #include <libraries/asl.h>
  18. #include <workbench/workbench.h>
  19. #include <proto/exec.h>
  20. #include <proto/dos.h>
  21. #include <proto/intuition.h>
  22. #include <proto/bgui.h>
  23. #include <proto/icon.h>
  24. #include <proto/wb.h>
  25. #include <proto/asl.h>
  26. #include <clib/alib_protos.h>
  27. #include <string.h>
  28. #include <stdlib.h>
  29.  
  30. #include "code.h"
  31. #include "version.h"
  32. #include "yak.h"
  33. #include "hotkey_types.h"
  34. #include "gui.h"
  35. #include "filereq.h"
  36. #include "Requesters.h"
  37. #include "Settings.h"
  38. #include "Root_Window.h"
  39. #include "Root_Menus.h"
  40.  
  41. #define CATCOMP_NUMBERS
  42. #include "locale/yak_locale_strings.h"
  43.  
  44. /************************************************************************
  45. *****************************  REFERENCES  ******************************
  46. ************************************************************************/
  47.  
  48. IMPORT LONG (*HandleReturnID)(LONG ID);
  49. IMPORT BOOL CreateIcons;
  50. IMPORT char *ProgramName;
  51. IMPORT char *PrefsFile;
  52. IMPORT char *PrefsHelp;
  53. IMPORT struct NotifyRequest NotifyRequest;
  54.  
  55. /************************************************************************
  56. *****************************  LOCAL DATA  ******************************
  57. ************************************************************************/
  58.  
  59. struct Window   *RootWnd = NULL;
  60. Object                  *RootWndObj = NULL;
  61. Object                  *RootObjects[Root_CNT];
  62. UBYTE                   *RootWdt;
  63. struct IBox             RootBox;
  64. BOOL                    RootBoxValid = FALSE;
  65. BOOL                    RootWdi = FALSE;
  66.  
  67. /************************************************************************
  68. *************************  CREATEROOTWINDOW()  **************************
  69. *************************************************************************
  70. * Create the root window object tree. Returns the window object ptr or
  71. * NULL if create failed. Gadgets are initialised with default values,
  72. * InitRootGadgets must be called after window opened to reflect current
  73. * settings.
  74. *
  75. *************************************************************************/
  76.  
  77. APTR CreateRootWindow(VOID)
  78. {
  79. Object  *obj,*indicobj;
  80.  
  81. /* maplist: converts slider level tag to indicator level tag */
  82. static struct TagItem SliderToIndicMap[] = {
  83.         SLIDER_Level, INDIC_Level, TAG_DONE
  84. };
  85.  
  86. obj = WindowObject,
  87.         WINDOW_PubScreenName, PubScreenName,
  88.         WINDOW_Title,           RootWdt,
  89.         WINDOW_ScreenTitle,     getString(COPYRIGHT_STRING),
  90.         WINDOW_SmartRefresh, TRUE,
  91.         WINDOW_SizeBottom,      FALSE,                  /* put size gadget in right border */
  92.         WINDOW_SizeRight,       TRUE,
  93.         WINDOW_AutoAspect,      TRUE,                   /* automatic edges pixel width */
  94.         WINDOW_Position,        POS_CENTERMOUSE,
  95.         (RootBoxValid ? WINDOW_Bounds : TAG_IGNORE), &RootBox,
  96.         WINDOW_AppWindow,       TRUE,                   /* make it an appwindow */
  97.         WINDOW_MenuStrip,       RootNewMenu,
  98.         WINDOW_CloseGadget,     FALSE,
  99.         (TextFont ? WINDOW_Font : TAG_IGNORE),  &Attr,  /* use font if specified */
  100.         WINDOW_HelpFile,        PrefsHelp,              /* online help system */
  101.         WINDOW_HelpNode,        "MainWindow",
  102.         WINDOW_MasterGroup,
  103.                 VGroupObject, Spacing(4), HOffset(4), VOffset(4),
  104.                         StartMember,
  105.                                 /* windows activation group */
  106.                                 HGroupObject, Spacing(24), HOffset(6), VOffset(4),
  107.                                                 /* add frame & title to Windows Activation group */
  108.                                                 NeXTFrame,
  109.                                                 FRM_Title,              getString(WINDOWS_ACTIVATE_STRING),
  110.                                                 FRM_Flags,              FRF_EDGES_ONLY|FRF_CENTER_TITLE|FRF_HIGHLIGHT_TITLE,
  111.                                         StartMember,
  112.                                                 VGroupObject, Spacing(2),
  113.                                                         StartMember,
  114.                                                                 CH_KeyActivate = CheckBoxObject,
  115.                                                                         LAB_Label,              getString(KEY_ACTIVATE_STRING),
  116.                                                                         LAB_Place,              PLACE_RIGHT,
  117.                                                                         GA_ID,                  GD_KeyActCheck,
  118.                                                                         ButtonFrame,
  119.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  120.                                                                 EndObject, FixMinWidth,
  121.                                                         EndMember,
  122.                                                         VarSpace(DEFAULT_WEIGHT/10),
  123.                                                         StartMember,
  124.                                                                 CH_MMBActivate = CheckBoxObject,
  125.                                                                         LAB_Label,              getString(MMB_ACTIVATE_STRING),
  126.                                                                         LAB_Place,              PLACE_RIGHT,
  127.                                                                         GA_ID,                  GD_MMBActCheck,
  128.                                                                         ButtonFrame,
  129.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  130.                                                                 EndObject, FixMinWidth,
  131.                                                         EndMember,
  132.                                                         VarSpace(DEFAULT_WEIGHT/10),
  133.                                                         StartMember,
  134.                                                                 CH_RMBActivate = CheckBoxObject,
  135.                                                                         LAB_Label,              getString(RMB_ACTIVATE_STRING),
  136.                                                                         LAB_Place,              PLACE_RIGHT,
  137.                                                                         GA_ID,                  GD_RMBActCheck,
  138.                                                                         ButtonFrame,
  139.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  140.                                                                 EndObject, FixMinWidth,
  141.                                                         EndMember,
  142.                                                 EndObject,
  143.                                         EndMember,
  144.                                         StartMember,
  145.                                                 VGroupObject, Spacing(2),
  146.                                                         StartMember,
  147.                                                                 CH_AutoPoint = CheckBoxObject,
  148.                                                                         LAB_Label,              getString(AUTOPOINT_STRING),
  149.                                                                         LAB_Place,              PLACE_RIGHT,
  150.                                                                         GA_ID,                  GD_AutoCheck,
  151.                                                                         ButtonFrame,
  152.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  153.                                                                 EndObject, FixMinWidth,
  154.                                                         EndMember,
  155.                                                         VarSpace(DEFAULT_WEIGHT/10),
  156.                                                         StartMember,
  157.                                                                 STR_AutoScreen = StringObject,
  158.                                                                         LAB_Label,              getString(AUTOSCREENS_STRING),
  159.                                                                         RidgeFrame,
  160.                                                                         STRINGA_MaxChars,99,
  161.                                                                         STRINGA_MinCharsVisible,12,
  162.                                                                         GA_ID,                  GD_AutoPat,
  163.                                                                         GA_TabCycle,    TRUE,
  164.                                                                 EndObject,
  165.                                                         EndMember,
  166.                                                         VarSpace(DEFAULT_WEIGHT/10),
  167.                                                         StartMember,
  168.                                                                 HGroupObject, Spacing(2),
  169.                                                                         StartMember,
  170.                                                                                 SL_AutoPointDelay = SliderObject,
  171.                                                                                         LAB_Label,              getString(AUTOPOINT_DELAY_STRING),
  172.                                                                                         SLIDER_Min,             0,
  173.                                                                                         SLIDER_Max,             5,
  174.                                                                                         SLIDER_Level,   0,
  175.                                                                                         GA_ID,                  GD_AutoPointDelay,
  176.                                                                                 EndObject,
  177.                                                                         EndMember,
  178.                                                                         StartMember,
  179.                                                                                 indicobj = IndicatorObject,
  180.                                                                                         INDIC_Min,              0,
  181.                                                                                         INDIC_Max,              5,
  182.                                                                                         INDIC_Level,    0,
  183.                                                                                         INDIC_FormatString,"%1lu",
  184.                                                                                         INDIC_Justification,IDJ_CENTER,
  185.                                                                                 EndObject, Weight(DEFAULT_WEIGHT/10),
  186.                                                                         EndMember,
  187.                                                                 EndObject,
  188.                                                         EndMember,
  189.                                                 EndObject,
  190.                                         EndMember,
  191.                                 EndObject, Weight(DEFAULT_WEIGHT*3),
  192.                         EndMember,
  193.                         VarSpace(DEFAULT_WEIGHT/10),
  194.                         StartMember,
  195.                                 HGroupObject, Spacing(2),
  196.                                         StartMember,
  197.                                                 /* screens activation group */
  198.                                                 VGroupObject, /*Spacing(2), */HOffset(6), VOffset(4),
  199.                                                                 /* add frame & title to screens activation group */
  200.                                                                 NeXTFrame,
  201.                                                                 FRM_Title,              getString(SCREEN_ACTIVATE_STRING),
  202.                                                                 FRM_Flags,              FRF_EDGES_ONLY|FRF_CENTER_TITLE|FRF_HIGHLIGHT_TITLE,
  203.                                                         StartMember,
  204.                                                                 CH_ScreensActivation = CheckBoxObject,
  205.                                                                         LAB_Label,              getString(SCREEN_ACTIVATE_STRING),
  206.                                                                         LAB_Place,              PLACE_RIGHT,
  207.                                                                         GA_ID,                  GD_ScrActCheck,
  208.                                                                         ButtonFrame,
  209.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  210.                                                                 EndObject, FixMinWidth,
  211.                                                         EndMember,
  212.                                                         VarSpace(DEFAULT_WEIGHT*11/10),
  213.                                                 EndObject, Weight(DEFAULT_WEIGHT/3),
  214.                                         EndMember,
  215.                                         VarSpace(DEFAULT_WEIGHT/20),
  216.                                         StartMember,
  217.                                                 VGroupObject, Spacing(2),
  218.                                                         StartMember,
  219.                                                                 /* autopoptofront group */
  220.                                                                 VGroupObject, /*Spacing(2), */HOffset(6), VOffset(4),
  221.                                                                                 /* add frame & title to autopoptofront group */
  222.                                                                                 NeXTFrame,
  223.                                                                                 FRM_Title,              getString(AUTOPOPTOFRONT_STRING),
  224.                                                                                 FRM_Flags,              FRF_EDGES_ONLY|FRF_CENTER_TITLE|FRF_HIGHLIGHT_TITLE,
  225.                                                                         StartMember,
  226.                                                                                 CH_AutoPopToFront = CheckBoxObject,
  227.                                                                                         LAB_Label,              getString(AUTOPOPTOFRONT_STRING),
  228.                                                                                         LAB_Place,              PLACE_RIGHT,
  229.                                                                                         GA_ID,                  GD_AutoPopCheck,
  230.                                                                                         ButtonFrame,
  231.                                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  232.                                                                                 EndObject, FixMinWidth,
  233.                                                                         EndMember,
  234.                                                                         VarSpace(DEFAULT_WEIGHT/10),
  235.                                                                         StartMember,
  236.                                                                                 STR_PopWindows = StringObject,
  237.                                                                                         LAB_Label,              getString(POPWINDOWS_STRING),
  238.                                                                                         RidgeFrame,
  239.                                                                                         STRINGA_MaxChars,99,
  240.                                                                                         STRINGA_MinCharsVisible,12,
  241.                                                                                         GA_ID,                  GD_PopPat,
  242.                                                                                         GA_TabCycle,    TRUE,
  243.                                                                                 EndObject,
  244.                                                                         EndMember,
  245.                                                                 EndObject,
  246.                                                         EndMember,
  247.                                                 EndObject,
  248.                                         EndMember,
  249.                                 EndObject, Weight(DEFAULT_WEIGHT*2),
  250.                         EndMember,
  251.                         VarSpace(DEFAULT_WEIGHT/10),
  252.                         StartMember,
  253.                                 HGroupObject, Spacing(2),
  254.                                         StartMember,
  255.                                                 BT_MouseCycling = Button(
  256.                                                                 getString(MOUSECYCLING_STRING),
  257.                                                                 GD_MouseCycling),
  258.                                         EndMember,
  259.                                         StartMember,
  260.                                                 BT_Blanking = Button(
  261.                                                                 getString(Blanking),
  262.                                                                 GD_Blanking),
  263.                                         EndMember,
  264.                                 EndObject,
  265.                         EndMember,
  266.                         StartMember,
  267.                                 HGroupObject, Spacing(2),
  268.                                         StartMember,
  269.                                                 BT_EditHotkeys = Button(
  270.                                                                 getString(EDIT_HOTKEYS_STRING),
  271.                                                                 GD_EditHotkeys),
  272.                                         EndMember,
  273.                                         StartMember,
  274.                                                 BT_Miscellaneous = Button(
  275.                                                                 getString(MISCELLANEOUS_STRING),
  276.                                                                 GD_Miscellaneous),
  277.                                         EndMember,
  278.                                 EndObject,
  279.                         EndMember,
  280.                         VarSpace(DEFAULT_WEIGHT/10),
  281.                         StartMember,
  282.                                 HorizSeparator,
  283.                         EndMember,
  284.                         StartMember,
  285.                                 HGroupObject, Spacing(2),
  286.                                         StartMember,
  287.                                                 BT_Save = Button(getString(SAVE_STRING),GD_Save),
  288.                                         EndMember,
  289.                                         VarSpace(DEFAULT_WEIGHT/3),
  290.                                         StartMember,
  291.                                                 BT_Use = Button(getString(USE_STRING),GD_Use),
  292.                                         EndMember,
  293.                                         VarSpace(DEFAULT_WEIGHT/3),
  294.                                         StartMember,
  295.                                                 BT_Cancel = Button(getString(CANCEL_STRING),GD_Cancel0),
  296.                                         EndMember,
  297.                                 EndObject,
  298.                         EndMember,
  299.                 EndObject,
  300.         EndObject;
  301.  
  302. if (obj)
  303.         {
  304.         /* set tab cycle order between string gadgets */
  305.         DoMethod(obj,WM_TABCYCLE_ORDER,STR_AutoScreen,STR_PopWindows,NULL);
  306.  
  307.         /* add map from slider to its level indicator */
  308.         AddMap(SL_AutoPointDelay,indicobj,SliderToIndicMap);
  309.  
  310.         /* add conditional map: disables STR_AutoScreen and */
  311.         /* SL_AutoPointDelay when CH_AutoPoint is unchecked */
  312.         AddCondit(CH_AutoPoint,STR_AutoScreen,GA_Selected,TRUE,
  313.                 GA_Disabled,FALSE,GA_Disabled,TRUE);
  314.         AddCondit(CH_AutoPoint,SL_AutoPointDelay,GA_Selected,TRUE,
  315.                 GA_Disabled,FALSE,GA_Disabled,TRUE);
  316.  
  317.         /* add conditional map: disables STR_PopWindows */
  318.         /* when CH_AutoPopToFront is unchecked */
  319.         AddCondit(CH_AutoPopToFront,STR_PopWindows,GA_Selected,TRUE,
  320.                 GA_Disabled,FALSE,GA_Disabled,TRUE);
  321.         }
  322.  
  323. return(obj);
  324. }
  325.  
  326. /************************************************************************
  327. *************************  INITIALIZE GADGETS  **************************
  328. *************************************************************************
  329. * Initialize the root window gadgets to reflect current settings.
  330. *************************************************************************/
  331.  
  332. static void InitAutoPointGadgets(void)
  333. {
  334. InitWindowGadget(GDX_AutoPat, STRINGA_TextVal, (LONG)patterns[YP_AUTOSCR_PAT].patstr, ROOT_WINDOW);
  335. InitWindowGadget(GDX_AutoPat, GA_Disabled, !autopoint, ROOT_WINDOW);
  336.  
  337. InitWindowGadget(GDX_AutoPointDelay, SLIDER_Level, autopoint_delay, ROOT_WINDOW);
  338. InitWindowGadget(GDX_AutoPointDelay, GA_Disabled, !autopoint, ROOT_WINDOW);
  339. }
  340.  
  341. static void InitAutoPopGadgets(void)
  342. {
  343. InitWindowGadget(GDX_PopPat, STRINGA_TextVal, (LONG)patterns[YP_POPWIN_PAT].patstr, ROOT_WINDOW);
  344. InitWindowGadget(GDX_PopPat, GA_Disabled, !autopop, ROOT_WINDOW);
  345. }
  346.  
  347. static void InitRootGadgets(void)
  348. {
  349. InitToggleGadgets(ROOT_WINDOW);
  350. InitAutoPopGadgets();
  351. InitAutoPointGadgets();
  352. }
  353.  
  354. /************************************************************************
  355. **************************  CLOSEROOTWINDOW()  **************************
  356. *************************************************************************
  357. * Close the root window, disposing of the root window object.
  358. *
  359. *************************************************************************/
  360.  
  361. void CloseRootWindow(void)
  362. {
  363. if (RootWnd)
  364.         {
  365.         GetAttr(WINDOW_Bounds,RootWndObj,(ULONG *) &RootBox);
  366.         RootBoxValid = TRUE;
  367.         }
  368.  
  369. DisposeObject(RootWndObj);
  370. RootWndObj = NULL;
  371. RootWnd = NULL;
  372. }
  373.  
  374. /************************************************************************
  375. **************************  SHOWROOTWINDOW()  ***************************
  376. *************************************************************************
  377. * Create and open the root window and initialize the gadgets to reflect
  378. * current settings. Sets up HandleReturnID function, curwin, curwinobj
  379. * and curwinID. Returns TRUE or FALSE to indicate success.
  380. *
  381. *************************************************************************/
  382.  
  383. BOOL ShowRootWindow(void)
  384. {
  385. static char title[80];
  386.  
  387. if (!RootWdi)
  388. {
  389.     RootWdi = TRUE;
  390.  
  391.     strcpy(title, getString(Prefs_Window_TITLE));
  392.     strcat(title, " : ");
  393.     strcat(title,VERSION_NAME);
  394.     RootWdt = title;
  395.     InitRootNewMenu ();
  396. }
  397.  
  398. if (RootWndObj = (Object *)CreateRootWindow())
  399.         {
  400.         if (RootWnd = WindowOpen(RootWndObj))
  401.                 {
  402.                 InitRootGadgets();
  403.                 HandleReturnID = HandleRootReturnID;
  404.                 curwin = RootWnd;
  405.                 curwinobj = RootWndObj;
  406.                 curwinID = ROOT_WINDOW;
  407.                 return(TRUE);
  408.                 }
  409.         }
  410.  
  411. CloseRootWindow();
  412. curwin = NULL;
  413. curwinobj = NULL;
  414. wndsigflag = 0L;
  415. appwinsigflag = 0L;
  416. return(FALSE);
  417. }
  418.  
  419. /************************************************************************
  420. ************************  HANDLEROOTRETURNID()  *************************
  421. *************************************************************************
  422. * Handle msgs arriving at root window - supply the ID returned by BGUI.
  423. * Returns either RET_OKAY or RET_QUIT.
  424. *
  425. *************************************************************************/
  426.  
  427. LONG HandleRootReturnID(LONG id)
  428. {
  429. LONG    ret;
  430.  
  431. ret = RET_OKAY;
  432.  
  433. switch(id)
  434.         {
  435.         case GD_EditHotkeys:
  436.                 if (!SwitchFromRootWindow(HOTKEY_WINDOW))
  437.                         {
  438.                         PostError(getString(Couldnt_open_other_window_ERR));
  439.                         ret = RET_QUIT;
  440.                         }
  441.                 break;
  442.  
  443.         case GD_Miscellaneous:
  444.                 if (!SwitchFromRootWindow(MISC_WINDOW))
  445.                         {
  446.                         PostError(getString(Couldnt_open_other_window_ERR));
  447.                         ret = RET_QUIT;
  448.                         }
  449.                 break;
  450.  
  451.         case GD_Blanking:
  452.                 if (!SwitchFromRootWindow(BLANK_WINDOW))
  453.                         {
  454.                         PostError(getString(Couldnt_open_other_window_ERR));
  455.                         ret = RET_QUIT;
  456.                         }
  457.                 break;
  458.  
  459.         case GD_MouseCycling:
  460.                 if (!SwitchFromRootWindow(MCYCLING_WINDOW))
  461.                         {
  462.                         PostError(getString(Couldnt_open_other_window_ERR));
  463.                         ret = RET_QUIT;
  464.                         }
  465.                 break;
  466.  
  467.         case GD_AutoPat:
  468.                 NewPattern(GDX_AutoPat, &patterns[YP_AUTOSCR_PAT],
  469.                                 (struct Gadget *)STR_AutoScreen, ROOT_WINDOW);
  470.                 break;
  471.  
  472.         case GD_PopPat:
  473.                 NewPattern(GDX_PopPat, &patterns[YP_POPWIN_PAT],
  474.                                 (struct Gadget *)STR_PopWindows, ROOT_WINDOW);
  475.                 break;
  476.  
  477.         case GD_Save:
  478.                 DisableYakInterface();
  479.                 EndNotify(&NotifyRequest);
  480.                 SaveSettings(ENVARC_CONFIG_FILE);
  481.                 CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
  482.                 StartNotify(&NotifyRequest);
  483.                 EnableYakInterface();
  484.                 ret   = RET_QUIT;
  485.                 break;
  486.  
  487.         case GD_Use:
  488.                 DisableYakInterface();
  489.                 EndNotify(&NotifyRequest);
  490.                 SaveSettings(ENV_CONFIG_FILE);
  491.                 StartNotify(&NotifyRequest);
  492.                 ret   = RET_QUIT;
  493.                 break;
  494.  
  495.         case GD_Cancel0:
  496.                 ret   = RET_QUIT;
  497.                 break;
  498.  
  499.         case GD_AutoCheck: /* toggle */
  500.                 autopoint ^= TRUE;
  501.                 break;
  502.  
  503.         case GD_AutoPopCheck: /* toggle */
  504.                 autopop ^= TRUE;
  505.                 break;
  506.  
  507.         case GD_KeyActCheck: /* toggle */
  508.                 keyactivate ^= TRUE;
  509.                 break;
  510.  
  511.         case GD_ScrActCheck: /* toggle */
  512.                 scractivate ^= TRUE;
  513.                 break;
  514.  
  515.         case GD_RMBActCheck: /* toggle */
  516.                 rmbactivate ^= TRUE;
  517.                 break;
  518.  
  519.         case GD_MMBActCheck: /* toggle */
  520.                 mmbactivate ^= TRUE;
  521.                 break;
  522.  
  523.         case GD_AutoPointDelay:
  524.                 {
  525.                 ULONG   tmp;
  526.  
  527.                 GetAttr(SLIDER_Level,SL_AutoPointDelay,&tmp);
  528.                 autopoint_delay = tmp;
  529.                 }
  530.                 break;
  531.  
  532.         case MD_OPEN:
  533.                 {
  534.                 FileReqParams   frp;
  535.                 char                    *file;
  536.  
  537.                 frp.frp_Window      = curwin;
  538.                 frp.frp_Title       = getString(FILEREQ_LOAD_STRING);
  539.                 frp.frp_InitialFile = PrefsFile;
  540.                 frp.frp_Flag1       = 0L;
  541.  
  542.                 DisableYakInterface();
  543.                 if (file=OpenFileRequester(&frp))
  544.                         {
  545.                         LoadSettings(file);
  546.                         FreeVec(PrefsFile);
  547.                         PrefsFile = file;
  548.                         InitRootGadgets();
  549.                         }
  550.                 EnableYakInterface();
  551.                 }
  552.                 break;
  553.  
  554.         case MD_SAVE:
  555.                 DisableYakInterface();
  556.                 EndNotify(&NotifyRequest);
  557.                 SaveSettings(ENVARC_CONFIG_FILE);
  558.                 CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
  559.                 StartNotify(&NotifyRequest);
  560.                 EnableYakInterface();
  561.                 break;
  562.  
  563.         case MD_SAVEAS:
  564.                 {
  565.                 FileReqParams   frp;
  566.                 char                    *file;
  567.  
  568.                 frp.frp_Window      = curwin;
  569.                 frp.frp_Title       = getString(FILEREQ_SAVEAS_STRING);
  570.                 frp.frp_InitialFile = PrefsFile;
  571.                 frp.frp_Flag1       = FRF_DOSAVEMODE;
  572.  
  573.                 DisableYakInterface();
  574.                 EndNotify(&NotifyRequest);
  575.                 if (file=OpenFileRequester(&frp))
  576.                         {
  577.                         SaveSettings(file);
  578.                         if (CreateIcons)
  579.                                 {
  580.                                 struct DiskObject *dobj;
  581.  
  582.                                 /* Get project icon */
  583.                                 if (!(dobj=GetDiskObject("ENV:Sys/def_yak")))
  584.                                         dobj = GetDefDiskObject(WBPROJECT);
  585.  
  586.                                 if (dobj)
  587.                                         {
  588.                                         /* Set values */
  589.                                         dobj->do_DefaultTool = ProgramName;
  590.                                         dobj->do_Type        = WBPROJECT;
  591.  
  592.                                         /* Write icon */
  593.                                         PutDiskObject(file, dobj);
  594.  
  595.                                         /* Free icon */
  596.                                         FreeDiskObject(dobj);
  597.                                         }
  598.                                 }
  599.                         FreeVec(PrefsFile);
  600.                         PrefsFile = file;
  601.                         }
  602.                 StartNotify(&NotifyRequest);
  603.                 EnableYakInterface();
  604.                 }
  605.                 break;
  606.  
  607.         case MD_HIDE:
  608.         case WMHI_CLOSEWINDOW:
  609.                 HideInterface();
  610.                 break;
  611.  
  612.         case MD_ABOUT:
  613.                 DisableYakInterface();
  614.                 PostError(getString(About_Yak_STRING));
  615.                 EnableYakInterface();
  616.                 break;
  617.  
  618.         case MD_QUIT:
  619.                 ret   = RET_QUIT;
  620.                 break;
  621.  
  622.         case MD_DEFAULT:
  623.                 DisableYakInterface();
  624.                 SetDefaultSettings();
  625.                 InitRootGadgets();
  626.                 EnableYakInterface();
  627.                 break;
  628.  
  629.         case MD_LASTSAVED:
  630.                 DisableYakInterface();
  631.                 LoadSettings(ENVARC_CONFIG_FILE);
  632.                 InitRootGadgets();
  633.                 EnableYakInterface();
  634.                 break;
  635.  
  636.         case MD_ACTIVE:
  637.                 DisableYakInterface();
  638.                 LoadSettings(ENV_CONFIG_FILE);
  639.                 InitRootGadgets();
  640.                 EnableYakInterface();
  641.                 break;
  642.  
  643.         case MD_CREATEICONS:
  644.                 CreateIcons ^= TRUE;
  645.                 break;
  646.  
  647.         default:
  648.                 break;
  649.         }
  650.  
  651. return ret;
  652. }
  653.  
  654. /************************************************************************
  655. ***********************  SWITCHFROMROOTWINDOW()  ************************
  656. *************************************************************************
  657. * Switch from root window to the sub-window whose ID is supplied.
  658. * Returns TRUE or FALSE to indicate success.
  659. *
  660. *************************************************************************/
  661.  
  662. BOOL SwitchFromRootWindow(UBYTE WindowID)
  663. {
  664. CloseRootWindow();
  665. return(ShowWindowID(WindowID));
  666. }
  667.  
  668.